package lambdademo;

/**
 * Creared with IntelliJ IDEA.
 * Description:lambda表达式
 * User:yxd
 * Date:2022-03-02
 * Time:15:31
 */
//接口里面只有一个函数  这个接口被称为函数式接口  有两个函数就不是了
@FunctionalInterface
interface NoParameterReturn{//不带参数的且没有返回值
    void demo();
}

@FunctionalInterface
interface OneParameterReturn{//一个参数的无返回值
    void demo(int a);
}


@FunctionalInterface
interface MoreParameterReturn{//多个参数的无返回值
    void demo(int a,int b);
}


@FunctionalInterface
interface NoParameterHaveReturn{//不带参数的有返回值
    int demo();
}


@FunctionalInterface
interface OneParameterHaveReturn{//一个参数的有返回值
    int demo(int a);
}


@FunctionalInterface
interface MoreParameterHaveReturn{//多个参数的有返回值
    int demo(int a,int b);
}



public class Test {
    public static void main(String[] args) {
        NoParameterReturn n =  new NoParameterReturn(){
            @Override
            public void demo() {
                System.out.println("重写");
            }
        };
        n.demo();//这样的话看起来会很繁琐 lambda表达式就是为了简化这样的接口
        NoParameterReturn n1 = ()-> System.out.println("重写");//匿名函数 和上面是一样的,但是这样的写法看起来不太好理解,一般在理解了上面,之后在写这个比较好
        n1.demo();

        OneParameterReturn o = (a)->{ System.out.println(a);};
        OneParameterReturn o1 = a-> System.out.println(a);//优化
        OneParameterReturn o2 = System.out::println;//了解


        MoreParameterReturn m = (a,b)->{ System.out.println(a + b);};
        MoreParameterReturn m1 = (a,b)->System.out.println(a + b);



        NoParameterHaveReturn n2 = ()-> {return 10;};
        NoParameterHaveReturn n3 = ()-> 10;//没有参数返回值是10


        OneParameterHaveReturn o3 = a->a+10;

        MoreParameterHaveReturn m2 = (a,b)->a + b;
    }
}
